﻿using System;
using System.Collections.Generic;
using System.Linq;
using Crosland.Automotriz.Logic.Linq;
using Subgurim.Controles;
using Crosland.Automotriz.Entidad;
using DevExpress.Web.ASPxEditors;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web.ASPxGridView;
using System.Configuration;
using System.IO;

namespace Crosland.Automotriz.Web
{
    public partial class wFrmClienteLocalActualizar : System.Web.UI.Page
    {
        string idGestionComercial = ConfigurationManager.AppSettings["GestionComercial"];
        clsTD_ClienteBL blCliente = new clsTD_ClienteBL();
        clsT_Mae_Tabla_General_DetBL blGeneral = new clsT_Mae_Tabla_General_DetBL();
        List<T_CRM_CLIENTE_LOCAL_VISITA_CARPETA> treeItems;
        List<T_CRM_CLIENTE_LOCAL_VISITA_CARPETA> treeItemsChild;

        clsT_CRM_CLIENTE_LOCAL_VISITA_CARPETABL NegocioCarpetas = new clsT_CRM_CLIENTE_LOCAL_VISITA_CARPETABL();
        clsT_CRM_CLIENTE_LOCAL_VISITA_CARPETA_FOTOBL NegocioFotos = new clsT_CRM_CLIENTE_LOCAL_VISITA_CARPETA_FOTOBL();


        const string script = "MostrarAlerta();";
        const string script2 = "MostrarCorrecto();";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                CargarMapa();
                MostrarNombreComercialCliente();
                ListarModelosxCliente();
                ListarModelosxMarcas();
                ListarTipoClasificacion();
                ListarCondicionCliente();
                ListarDepartamento();
                ListarEstadoExclusividad();
                ListarCategoriaCliente();
                ListarVendedor();
                ListarVisitas();
                

                if (Request.QueryString["IdLocal"] != null)
                {
                    lblTitulo.Text = "Modificar Local";
                    string IdLocal = Request.QueryString["IdLocal"];
                    MarcarClasificacion();
                    MostrarLocal();
                }
                else
                {
                    lblTitulo.Text = "Nuevo Local";
                    ListarRazonesSociales();
                }

                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
            }
            MostrarMapa();
        }

        void MostrarMapa()
        {
            string script = 
                    //"<script src='js_maps/jquery.min.js' type='text/javascript'></script>" +
                    "<script type='text/javascript'>" +

                    "var map;" +
                    "var geocoder = null;" +
                    "var marker = null;" +
                    "var lat = '';" +
                    "var lng = '';" +
                    "var zoom = null;" +

                    "window.onload = $(function () {" +
                //"lat = $('#ctl00_cphMain_ASPxPageControl1_lblLatitud').html();" +
                //"lng = $('#ctl00_cphMain_ASPxPageControl1_lblLongitud').html();" +

                        "lat = $('#ctl00_cphMain_ASPxPageControl1_txt_Latitud').val();" +
                        "lng = $('#ctl00_cphMain_ASPxPageControl1_txt_Longitud').val();" +

                        "if(document.getElementById('ctl00_cphMain_ASPxPageControl1_lblLatitud') != null){" +
                            "document.getElementById('ctl00_cphMain_ASPxPageControl1_lblLatitud').innerText = lat;" +
                        "}" +

                        "if(document.getElementById('ctl00_cphMain_ASPxPageControl1_lblLongitud') != null){" +
                            "document.getElementById('ctl00_cphMain_ASPxPageControl1_lblLongitud').innerText = lng;" +
                        "}" +
                        
                        //Inicializamos el mapa
                        "initialize();" +

                         //Asignamos al evento click del boton la funcion codeAddress
                        "$('#ctl00_cphMain_ASPxPageControl1_btn_verdirecion').click(function () {" +
                           "codeAddress();" +
                           "return false;" +
                        "});" +
                    "});" +

                    "function initialize() {" +
                        "geocoder = new google.maps.Geocoder();" +

                        //Si hay valores creamos un objeto Latlng
                        "if (lat == '' && lng == '') {" +
                            "var latLng = new google.maps.LatLng(-9.750000, -76.000000);" +
                            "zoom = 5;" +
                        "}" +
                        "else {" +
                            "if (lat == '0' && lng == '0') {" +
                                "var latLng = new google.maps.LatLng(-9.750000, -76.000000);" +
                                "zoom = 5;" +
                            "}" +
                             "else {" +
                                "var latLng = new google.maps.LatLng(lat, lng);" +
                                "zoom = 16;" +
                           "}" +
                        "}" +

                        //Definimos algunas opciones del mapa a crear
                        "var myOptions = {" +
                            "center: latLng," + //centro del mapa
                            "zoom: zoom," + //zoom del mapa
                            "mapTypeId: google.maps.MapTypeId.ROADMAP" + //tipo de mapa, carretera, híbrido,etc
                        "};" +

                        //creamos el mapa con las opciones anteriores y le pasamos el elemento div
                        "map = new google.maps.Map(document.getElementById('map'), myOptions);" +

                        //creamos el marcador en el mapa
                        "marker = new google.maps.Marker({" +
                            "map: map," + //el mapa creado en el paso anterior
                            "position: latLng," + //objeto con latitud y longitud
                            "draggable: true" + //que el marcador se pueda arrastrar
                        "});" +

                        //Añado un listener para cuando el markador se termine de arrastrar
                //actualize el formulario con las nuevas coordenadas
                        "google.maps.event.addListener(marker, 'dragend', function () {" +
                            "updatePosition(marker.getPosition());" +
                        "});" +
                    "}" +

                    "function codeAddress() {" +
                //obtengo la direccion del formulario
                        "var address = document.getElementById('ctl00_cphMain_ASPxPageControl1_txtBuscarCalle_Raw').value;" +

                        //hago la llamada al geodecoder
                        "geocoder.geocode({ 'address': address }, function (results, status) {" +

                            //si el estado de la llamado es OK
                            "if (status == google.maps.GeocoderStatus.OK) {" +
                //centro el mapa en las coordenadas obtenidas
                                "map.setCenter(results[0].geometry.location);" +

                                //coloco el marcador en dichas coordenadas
                                "marker.setPosition(results[0].geometry.location);" +

                                //actualizo el formulario      
                                "updatePosition(results[0].geometry.location);" +

                                //Añado un listener para cuando el markador se termine de arrastrar
                //actualize el formulario con las nuevas coordenadas
                                "google.maps.event.addListener(marker, 'dragend', function () {" +
                                    "updatePosition(marker.getPosition());" +
                                "});" +
                            "}" +
                            "else {" +
                //si no es OK devuelvo error
                                "if($('#ctl00_cphMain_ASPxPageControl1_txt_Latitud').val() == '0')" +
                                "{" +
                                    "alert('No podemos encontrar la dirección : ' + address + ' -- error: ' + status);" +
                                    "$('#ctl00_cphMain_ASPxPageControl1_txt_Latitud').val('1');" +
                                "}" +
                                "else {" +
                                    "$('#ctl00_cphMain_ASPxPageControl1_txt_Latitud').val('0');" +
                                "}" +

                            "}" +
                        "});" +
                    "}" +


                    //funcion que simplemente actualiza los campos del formulario
                    "function updatePosition(latLng) {" +
                        "document.getElementById('ctl00_cphMain_ASPxPageControl1_lblLatitud').innerText = latLng.lat();" +
                        "document.getElementById('ctl00_cphMain_ASPxPageControl1_lblLongitud').innerText = latLng.lng();" +
                //"$('#ctl00_cphMain_ASPxPageControl1_lblLatitud').innerHTML = (latLng.lat());" +
                //"$('#ctl00_cphMain_ASPxPageControl1_lblLongitud').innerHTML = (latLng.lng());" +

                        "$('#ctl00_cphMain_ASPxPageControl1_txt_Latitud').val(latLng.lat());" +
                        "$('#ctl00_cphMain_ASPxPageControl1_txt_Longitud').val(latLng.lng());" +
                    "}" +
            "</script>";

            ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
        }

        void ListarDepartamento()
        {
            clsTD_UbigeoBL UbigeoBL = new clsTD_UbigeoBL();
            cboDepartamento.DataSource = UbigeoBL.ListarDepartamento();
            cboDepartamento.TextField = "DES_DEPARTAMENTO";
            cboDepartamento.ValueField = "COD_DEPARTAMENTO";
            cboDepartamento.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Seleccionar", Value = "" };
            cboDepartamento.Items.Insert(0, l);
            cboDepartamento.SelectedIndex = 0;
        }

        void ListarProvincia()
        {
            string COD_DEPARTAMENTO = cboDepartamento.SelectedItem.Value.ToString();
            clsTD_UbigeoBL UbigeoBL = new clsTD_UbigeoBL();
            cboProvincia.DataSource = UbigeoBL.ListarProvincia(COD_DEPARTAMENTO);
            cboProvincia.TextField = "DES_PROVINCIA";
            cboProvincia.ValueField = "COD_PROVINCIA";
            cboProvincia.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Seleccionar", Value = "" };
            cboProvincia.Items.Insert(0, l);
            cboProvincia.SelectedIndex = 0;
        }

        void ListarDistrito()
        {
            string COD_PROVINCIA = cboProvincia.SelectedItem.Value.ToString();
            clsTD_UbigeoBL UbigeoBL = new clsTD_UbigeoBL();
            cboDistrito.DataSource = UbigeoBL.ListarDistrito(COD_PROVINCIA);
            cboDistrito.TextField = "DES_DISTRITO";
            cboDistrito.ValueField = "ID_UBIGEO";
            cboDistrito.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Seleccionar", Value = "" };
            cboDistrito.Items.Insert(0, l);
            cboDistrito.SelectedIndex = 0;
        }

        void ListarModelosxMarcas()
        {
            clsVW_ModeloBL blModelo = new clsVW_ModeloBL();
            List<VW_TD_MODELO_LISTAR> l = blModelo.Listar();

            cboModelo0.DataSource = l;
            cboModelo0.TextField = "DES_MODELO";
            cboModelo0.ValueField = "ID_MODELO";
            cboModelo0.DataBind();
            cboModelo0.SelectedIndex = 0;
        }

        void ListarModelosxCliente()
        {
            int Id_Cliente = int.Parse(Request.QueryString["IdCliente"]);
            clsTD_Cliente_ModeloBL bl = new clsTD_Cliente_ModeloBL();
            List<TD_CLIENTE_MODELO> l = bl.ListarClienteModelo(Id_Cliente);

            gvModelos0.DataSource = l;
            gvModelos0.DataBind();
        }

        void ListarCondicionCliente()
        {
            clsT_Mae_Cliente_CondicionBL bl = new clsT_Mae_Cliente_CondicionBL();
            cboCondicion.DataSource = bl.Listar();
            cboCondicion.TextField = "DES_CONDICION";
            cboCondicion.ValueField = "ID_CONDICION";
            cboCondicion.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Seleccionar", Value = "" };
            cboCondicion.Items.Insert(0, l);
            cboCondicion.SelectedIndex = 0;
        }

        void ListarTipoClasificacion()
        {
            clsTD_Tipo_ClasificacionBL tcBL = new clsTD_Tipo_ClasificacionBL();
            gvClasificacion.DataSource = tcBL.Listar();
            gvClasificacion.DataBind();
        }

        void ListarEstadoExclusividad()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboEstadoExclusividad.DataSource = bl.Listar("ESTADO DE EXCLUSIVIDAD", 1);
            cboEstadoExclusividad.TextField = "DES_LARGA";
            cboEstadoExclusividad.ValueField = "ID_GENERAL_DET";
            cboEstadoExclusividad.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Seleccionar", Value = "" };
            cboEstadoExclusividad.Items.Insert(0, l);
            cboEstadoExclusividad.SelectedIndex = 0;
        }

        void ListarCategoriaCliente()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboCategoriaCliente.DataSource = bl.Listar("CATEGORIA DEL CLIENTE", 1);
            cboCategoriaCliente.TextField = "DES_LARGA";
            cboCategoriaCliente.ValueField = "ID_GENERAL_DET";
            cboCategoriaCliente.DataBind();

            ListEditItem l = new ListEditItem() { Text = "Seleccionar", Value = "" };
            cboCategoriaCliente.Items.Insert(0, l);
            cboCategoriaCliente.SelectedIndex = 0;
        }

        void ListarVendedor()
        {
            clsTD_VendedorBL bl = new clsTD_VendedorBL();
            cboVendedor.DataSource = bl.ListaVendedor();
            cboVendedor.TextField = "NOMBRE_APELLIDO";
            cboVendedor.ValueField = "ID_VENDEDOR";
            cboVendedor.DataBind();
            cboVendedor.SelectedIndex = 0;
        }

        void ListarRazonesSociales() 
        {
            if (Request.QueryString["IdCliente"] != null)
            {
                int Id_Cliente = int.Parse(Request.QueryString["IdCliente"]);
                cboCliente.DataSource = blCliente.ListarRazonesSociales(Id_Cliente);
                cboCliente.TextField = "DES_CLIENTE";
                cboCliente.ValueField = "ID_CLIENTE";
                cboCliente.DataBind();
                cboCliente.SelectedIndex = 0;
                cboCliente.Visible = true;
                Label40.Visible = true;
            }
        }

        void MostrarNombreComercialCliente()
        {
            int Id_Cliente = int.Parse(Request.QueryString["IdCliente"]);
            lblCliente.Text = blCliente.Listar(Id_Cliente).NOM_COMERCIAL;
        }

        void MostrarLocal()
        {
            int IdLocal = int.Parse(Request.QueryString["IdLocal"]);
            clsTD_Cliente_LocalBL oBL = new clsTD_Cliente_LocalBL();
            TD_CRM_CLIENTE_LOCAL eCL = new TD_CRM_CLIENTE_LOCAL();
            eCL = oBL.Seleccionar(IdLocal);
            int ID_UBIGEO = (int)eCL.ID_UBIGEO;

            clsTD_UbigeoBL oUbigeo = new clsTD_UbigeoBL();
            TD_UBIGEO eUbigeo = new TD_UBIGEO();
            eUbigeo = oUbigeo.Seleccionar(ID_UBIGEO);

            cboDepartamento.Value = eUbigeo.COD_DEPARTAMENTO;
            cboDepartamento_SelectedIndexChanged(null, null);

            cboProvincia.Value = eUbigeo.COD_PROVINCIA;
            cboProvincia_SelectedIndexChanged(null, null);

            cboDistrito.Value = ID_UBIGEO.ToString();

            txtEstablecimiento.Text = eCL.DES_NOMBRE;
            txtDireccion.Text = eCL.DES_DIRECCION;
            txtReferencia.Text = eCL.DES_REFERENCIA;

            cboCondicion.Value = eCL.ID_CONDICION.ToString();
            txtEncargado.Text = eCL.DES_ENCARGADO;
            if (string.IsNullOrEmpty(eCL.NUM_VENDEDORES.ToString()))
            {
                seVendedores.Value = 0;
            }
            else
            {
                seVendedores.Value = eCL.NUM_VENDEDORES;
            }

            txtTelefono1.Text = eCL.DES_TELEFONO1;
            txtTelefono2.Text = eCL.DES_TELEFONO2;
            txtTelefono3.Text = eCL.DES_TELEFONO3;

            txtEmail1.Text = eCL.DES_EMAIL1;
            txtEmail2.Text = eCL.DES_EMAIL2;
            txtEmail3.Text = eCL.DES_EMAIL3;

            lblLatitud.Text = eCL.NUM_COORDENADA_X;
            lblLongitud.Text = eCL.NUM_COORDENADA_Y;

            //Se agrego este codigo por MANUEL ROJAS MAGUIÑA
            //{
                txt_Latitud.Value = eCL.NUM_COORDENADA_X;
                txt_Longitud.Value = eCL.NUM_COORDENADA_Y;
            //}

            cboEstadoExclusividad.Value = eCL.ID_ESTADO_EXCLUSIVIDAD.ToString();
            cboCategoriaCliente.Value = eCL.ID_CATEGORIA_CLIENTE.ToString();

            if (!string.IsNullOrEmpty(lblLatitud.Text) && !string.IsNullOrEmpty(lblLongitud.Text))
            {
                //Se comento este codigo por MANUEL ROJAS MAGUIÑA
                //{
                    //mapa2.enableDragging = true;
                    //mapa2.enableHookMouseWheelToZoom = true;
                    //GMarker marker = new GMarker(new GLatLng(double.Parse(lblLatitud.Text), double.Parse(lblLongitud.Text)));
                //}

                string texto = String.Format(CadenaHtml.HtmlLocal, txtEstablecimiento.Text,
                    cboDepartamento.Text, cboProvincia.Text, cboDistrito.Text,
                    txtDireccion.Text, IdLocal);

                //Se comento este codigo por MANUEL ROJAS MAGUIÑA
                //{                
                    //GInfoWindow window = new GInfoWindow(marker, texto, false);
                    //mapa2.Add(window);
                    //mapa2.setCenter(new GLatLng(double.Parse(lblLatitud.Text), double.Parse(lblLongitud.Text)), 15);
                //}
            }
        }

        void Nuevo()
        {
            cboDistrito.SelectedIndex = 0;
            cboProvincia.SelectedIndex = 0;
            cboDepartamento.SelectedIndex = 0;
            txtEstablecimiento.Text = "";
            txtDireccion.Text = "";
            txtReferencia.Text = "";
            lblLatitud.Text = "0";
            lblLongitud.Text = "0";
            cboCondicion.SelectedIndex = 0;
            txtEncargado.Text = "";
            seVendedores.Value = 0;
            txtTelefono1.Text = "";
            txtTelefono2.Text = "";
            txtTelefono3.Text = "";
            txtEmail1.Text = "";
            txtEmail2.Text = "";
            txtEmail3.Text = "";
            cboEstadoExclusividad.SelectedIndex = 0;
            cboCategoriaCliente.SelectedIndex = 0;

            //Se comento este codigo por MANUEL ROJAS MAGUIÑA
            //{
                //mapa2.setCenter(new GLatLng(-9.750000, -76.000000), 5);
            //}

            for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
            {
                CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[1] as GridViewDataColumn, "chkEstado");
                chk.Checked = false;
            }
        }

        void MarcarClasificacion()
        {
            if (Request.QueryString["IdLocal"] != null)
            {
                int ID_LOCAL = int.Parse(Request.QueryString["IdLocal"]);

                clsTD_Cliente_ClasificacionBL ccBL = new clsTD_Cliente_ClasificacionBL();
                List<TD_CRM_CLIENTE_CLASIFICACION_LOCAL> eCC = ccBL.Listar(ID_LOCAL);

                for (int x = 0; x < eCC.Count; x++)
                {
                    for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
                    {
                        CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                        Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                        if (lbl != null && chk != null)
                        {
                            if (lbl.Text.Trim() == eCC[x].ID_TIPO_CLASIFICACION.ToString().Trim())
                            {
                                chk.Checked = true;
                                if (chk.Text == "VEH 2R")
                                {
                                    Panel1.Visible = true;
                                }
                            }
                        }
                    }
                }
            }
        }

        int? ObtenerIDSetup()
        {
            bool sales = false;
            bool service = false;
            bool spares = false;

            for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
            {
                CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                Label lblSetup = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblSetup");

                if (chk.Checked)
                {
                    if (lblSetup.Text.Trim().ToUpper() == "SALES")
                    {
                        sales = true;
                    }
                    if (lblSetup.Text.Trim().ToUpper() == "SERVICE")
                    {
                        service = true;
                    }
                    if (lblSetup.Text.Trim().ToUpper() == "SPARES")
                    {
                        spares = true;
                    }
                }
            }

            if (sales && service && spares) { return blGeneral.IDSetup("SALES + SERVICE + SPARES"); }
            if (sales && service) { return blGeneral.IDSetup("SALES + SERVICE"); }
            if (sales && spares) { return blGeneral.IDSetup("SALES + SPARES"); }
            if (service && spares) { return blGeneral.IDSetup("SERVICE + SPARES"); }
            if (sales) { return blGeneral.IDSetup("SALES ONLY"); }
            if (service) { return blGeneral.IDSetup("SERVICE ONLY"); }
            if (spares) { return blGeneral.IDSetup("SPARES ONLY"); }
            else return null;
        }

        int? ObtenerSALES()
        {
            int? sales = null;

            for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
            {
                CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                Label lblSetup = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblSetup");

                if (chk.Checked)
                {
                    if (lblSetup.Text.Trim().ToUpper() == "SALES")
                    {
                        sales = 1;
                    }
                }
            }
            return sales;
        }

        int? ObtenerSERVICE()
        {
            int? service = null;

            for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
            {
                CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                Label lblSetup = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblSetup");

                if (chk.Checked)
                {
                    if (lblSetup.Text.Trim().ToUpper() == "SERVICE")
                    {
                        service = 1;
                    }
                }
            }
            return service;
        }

        int? ObtenerSPARES()
        {
            int? spares = null;

            for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
            {
                CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                Label lblSetup = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblSetup");

                if (chk.Checked)
                {
                    if (lblSetup.Text.Trim().ToUpper() == "SPARES")
                    {
                        spares = 1;
                    }
                }
            }
            return spares;
        }

        int? ObtenerTALLER()
        {
            int? taller = null;

            for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
            {
                CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                Label lblSetup = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblSetup");

                if (chk.Checked)
                {
                    if (lblSetup.Text.Trim().ToUpper() == "TALLER")
                    {
                        taller = 1;
                    }
                }
            }
            return taller;
        }

        string ObtenerGlobo()
        {
            string rutaImagen = "/Images/GLOBOS/";
            if (ObtenerSALES() == 1 && ObtenerSERVICE() == 1 && ObtenerSPARES() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "SALES_SPARES_TALLER_SERVICE.png";
            }

            if (ObtenerSALES() == 1 && ObtenerSERVICE() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "SALES_SERVICE_TALLER.png";
            }
            if (ObtenerSALES() == 1 && ObtenerSERVICE() == 1 && ObtenerSPARES() == 1)
            {
                return rutaImagen + "SALES_SPARES_SERVICE.png";
            }
            if (ObtenerSALES() == 1 && ObtenerSPARES() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "SALES_SPARES_TALLER.png";
            }
            if (ObtenerSPARES() == 1 && ObtenerSERVICE() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "SALES_SPARES_TALLER.png";
            }

            if (ObtenerSALES() == 1 && ObtenerSERVICE() == 1)
            {
                return rutaImagen + "SALES_SERVICE.png";
            }
            if (ObtenerSALES() == 1 && ObtenerSPARES() == 1)
            {
                return rutaImagen + "SALES_SPARES.png";
            }
            if (ObtenerSALES() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "SALES_TALLER.png";
            }
            if (ObtenerSPARES() == 1 && ObtenerSERVICE() == 1)
            {
                return rutaImagen + "SPARES_SERVICE.png";
            }
            if (ObtenerSPARES() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "SPARES_TALLER.png";
            }
            if (ObtenerSERVICE() == 1 && ObtenerTALLER() == 1)
            {
                return rutaImagen + "TALLER_SERVICE.png";
            }

            if (ObtenerSALES() == 1)
            {
                return rutaImagen + "SALES.png";
            }
            if (ObtenerSERVICE() == 1)
            {
                return rutaImagen + "SERVICE.png";
            }
            if (ObtenerSPARES() == 1)
            {
                return rutaImagen + "SPARES.png";
            }
            if (ObtenerTALLER() == 1)
            {
                return rutaImagen + "TALLER.png";
            }
            else return "";
        }

        protected void CargarMapa()
        {
            //Se comento todo este codigo por MANUEL ROJAS MAGUIÑA
            //{
                //mapa2.enableDragging = true;
                //mapa2.enableHookMouseWheelToZoom = true;
                //mapa2.setCenter(new GLatLng(-9.750000, -76.000000), 5);

                //GScreenOverlay screenOverlay = new GScreenOverlay(Constantes.ImgMapa,
                //       new GScreenPoint(480, 241, unitEnum.pixels, unitEnum.pixels),
                //       new GScreenPoint(0, 0),
                //       new GScreenSize(0, 0));

                //mapa2.Add(screenOverlay);
            //}
        }

        protected void cboDepartamento_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListarProvincia();
            cboProvincia.Focus();
        }

        protected void cboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListarDistrito();
            cboDistrito.Focus();
        }

        protected void btnObtenerCordenadas_Click(object sender, EventArgs e)
        {
            //Se comento este codigo por MANUEL ROJAS MAGUIÑA
            //{
                //this.lblLatitud.Text = mapa2.GCenter.lat.ToString();
                //this.lblLongitud.Text = mapa2.GCenter.lng.ToString();
            //}

            //Se comento este codigo por MANUEL ROJAS MAGUIÑA
            //{
                //mapa2.reset();
            //}

            if (!string.IsNullOrEmpty(lblLatitud.Text) && !string.IsNullOrEmpty(lblLongitud.Text))
            {
                int IdLocal = int.Parse(Request.QueryString["IdLocal"]);

                //Se comento este codigo por MANUEL ROJAS MAGUIÑA
                //{
                    //mapa2.enableDragging = true;
                    //mapa2.enableHookMouseWheelToZoom = true;
                //}

                GMarker marker = new GMarker(new GLatLng(double.Parse(lblLatitud.Text), double.Parse(lblLongitud.Text)));

                string texto = String.Format(CadenaHtml.HtmlLocal, txtEstablecimiento.Text,
                    cboDepartamento.Text, cboProvincia.Text, cboDistrito.Text,
                    txtDireccion.Text, IdLocal);

                GInfoWindow window = new GInfoWindow(marker, texto, false);
                
                //Se comento todo este codigo por MANUEL ROJAS MAGUIÑA
                //{
                    //mapa2.Add(window);
                    //mapa2.setCenter(new GLatLng(double.Parse(lblLatitud.Text), double.Parse(lblLongitud.Text)), 15);

                   //GScreenOverlay screenOverlay = new GScreenOverlay(Constantes.ImgMapa,
                   //new GScreenPoint(480, 241, unitEnum.pixels, unitEnum.pixels),
                   //new GScreenPoint(0, 0),
                   //new GScreenSize(0, 0));

                   //mapa2.Add(screenOverlay);
                //}
            }
        }

        protected void btnRegistrar_Click(object sender, EventArgs e)
        {
            if (cboDepartamento.SelectedIndex == 0)
            {
                lblMensaje.Text = "Debe seleccionar el departamento";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                cboDepartamento.Focus();
                return;
            }
            if (cboProvincia.SelectedIndex == 0)
            {
                lblMensaje.Text = "Debe seleccionar la provincia";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                cboProvincia.Focus();
                return;
            }
            if (cboDistrito.SelectedIndex == 0)
            {
                lblMensaje.Text = "Debe seleccionar el distrito";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                cboDistrito.Focus();
                return;
            }
            if (txtEstablecimiento.Text == "")
            {
                lblMensaje.Text = "Debe ingresar el establecimiento";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                txtEstablecimiento.Focus();
                return;
            }
            if (txtDireccion.Text == "")
            {
                lblMensaje.Text = "Debe ingresar la dirección";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                txtDireccion.Focus();
                return;
            }
            if (txtReferencia.Text == "")
            {
                lblMensaje.Text = "Debe ingresar la referencia";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                txtReferencia.Focus();
                return;
            }
            if (cboCondicion.SelectedIndex == 0)
            {
                lblMensaje.Text = "Debe seleccionar la condición";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                cboCondicion.Focus();
                return;
            }
            if (cboEstadoExclusividad.SelectedIndex == 0)
            {
                lblMensaje.Text = "Debe seleccionar el estado de exclusividad";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                cboEstadoExclusividad.Focus();
                return;
            }
            if (cboCategoriaCliente.SelectedIndex == 0)
            {
                lblMensaje.Text = "Debe seleccionar la categoría del cliente";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                cboCategoriaCliente.Focus();
                return;
            }
            try
            {
                int Id_Cliente = 0;
                clsTD_Cliente_LocalBL clBL = new clsTD_Cliente_LocalBL();
                clsTD_Cliente_ClasificacionBL oCC = new clsTD_Cliente_ClasificacionBL();
                if (Request.QueryString["IdLocal"] != null)
                {
                    Id_Cliente = int.Parse(Request.QueryString["IdCliente"]);
                }
                else 
                {
                    Id_Cliente = int.Parse(cboCliente.SelectedItem.Value.ToString());
                }

                bool RegistroOK = false;

                int ID_LOCAL;
                if (Request.QueryString["IdLocal"] != null)
                {
                    ID_LOCAL = int.Parse(Request.QueryString["IdLocal"]); //Actualizar
                }
                else
                {
                    ID_LOCAL = clBL.ObtenerUltimoID_LOCAL() + 1; //Registrar
                }

                TD_CRM_CLIENTE_LOCAL cle = new TD_CRM_CLIENTE_LOCAL();
                cle.ID_CLIENTE = Id_Cliente;
                cle.ID_LOCAL = ID_LOCAL;
                cle.DES_NOMBRE = txtEstablecimiento.Text;
                cle.DES_DIRECCION = txtDireccion.Text;
                cle.DES_REFERENCIA = txtReferencia.Text;
                cle.ID_UBIGEO = int.Parse(cboDistrito.SelectedItem.Value.ToString());
                cle.ID_CONDICION = int.Parse(cboCondicion.SelectedItem.Value.ToString());
                cle.DES_ENCARGADO = txtEncargado.Text;
                if (seVendedores.Value != null)
                {
                    cle.NUM_VENDEDORES = int.Parse(seVendedores.Value.ToString());
                }
                else
                {
                    cle.NUM_VENDEDORES = 0;
                }
                cle.DES_TELEFONO1 = txtTelefono1.Text.Trim();
                cle.DES_TELEFONO2 = txtTelefono2.Text.Trim();
                cle.DES_TELEFONO3 = txtTelefono3.Text.Trim();
                cle.DES_EMAIL1 = txtEmail1.Text.Trim();
                cle.DES_EMAIL2 = txtEmail2.Text.Trim();
                cle.DES_EMAIL3 = txtEmail3.Text.Trim();
                cle.NUM_COORDENADA_X = lblLatitud.Text;
                cle.NUM_COORDENADA_Y = lblLongitud.Text;
                cle.IND_ESTADO = true;
                cle.ID_ESTADO_EXCLUSIVIDAD = int.Parse(cboEstadoExclusividad.SelectedItem.Value.ToString());
                cle.ID_CATEGORIA_CLIENTE = int.Parse(cboCategoriaCliente.SelectedItem.Value.ToString());
                cle.ID_SETUP = ObtenerIDSetup();
                cle.SALES = ObtenerSALES();
                cle.SERVICE = ObtenerSERVICE();
                cle.SPARES = ObtenerSPARES();
                cle.DES_RUTA_ICONO = ObtenerGlobo();

                RegistroOK = oCC.Eliminar(ID_LOCAL);//Eliminar Clasificacion del Local

                if (Request.QueryString["IdLocal"] != null)
                {
                    RegistroOK = clBL.Actualizar(cle);
                }
                else
                {
                    RegistroOK = clBL.Insertar(cle);
                }

                //Registrar Clasificación  del cliente 
                for (int i = 0; i < gvClasificacion.VisibleRowCount; i++)
                {
                    CheckBox chk = (CheckBox)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "chkEstado");
                    Label lbl = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblID");
                    Label lblSetup = (Label)gvClasificacion.FindRowCellTemplateControl(i, gvClasificacion.Columns[0] as GridViewDataColumn, "lblSetup");

                    if (chk.Checked)
                    {
                        TD_CRM_CLIENTE_CLASIFICACION_LOCAL eCC = new TD_CRM_CLIENTE_CLASIFICACION_LOCAL();
                        eCC.ID_CLIENTE = Id_Cliente;
                        eCC.ID_TIPO_CLASIFICACION = int.Parse(lbl.Text);
                        eCC.ID_LOCAL = ID_LOCAL;
                        RegistroOK = oCC.Insertar(eCC);
                        if (!RegistroOK)
                        {
                            lblMensaje.Text = "Ocurrió un error al momento de registrar";
                            ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                            return;
                        }
                    }
                }

                if (RegistroOK)
                {
                    if (Request.QueryString["IdLocal"] != null)
                    {
                        lblMensajeCorrecto.Text = "Local actualizado satisfactoriamente";
                    }
                    else
                    {
                        lblMensajeCorrecto.Text = "Local registrado satisfactoriamente";
                        btnRegistrar.Enabled = false;
                    }
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script2, true);
                }
                else
                {
                    lblMensaje.Text = "Ocurrió un error al momento de registrar";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["IdClienteRetorno"] != null)
            {
                int IdClienteRetorno = int.Parse(Request.QueryString["IdClienteRetorno"]);
                Response.Redirect("wFrmClienteRegistrar.aspx?IdCliente=" + IdClienteRetorno.ToString() + "&id=" + idGestionComercial);
            }
            else 
            {
                int IdCliente = int.Parse(Request.QueryString["IdCliente"]);
                Response.Redirect("wFrmClienteRegistrar.aspx?IdCliente=" + IdCliente.ToString() + "&id=" + idGestionComercial);
            }
        }

        protected void gvModelos_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            try
            {
                int ID_CLIENTE_MODELO = int.Parse(e.Keys[0].ToString());
                clsTD_Cliente_ModeloBL oCM = new clsTD_Cliente_ModeloBL();
                TD_CLIENTE_MODELO eCM = new TD_CLIENTE_MODELO();
                eCM.ID_CLIENTE_MODELO = ID_CLIENTE_MODELO;
                oCM.Eliminar(eCM);
                e.Cancel = true;
                ListarModelosxCliente();
            }
            catch (Exception)
            {

            }
        }

        protected void btnAgregarModelo0_Click(object sender, EventArgs e)
        {
            int Id_Cliente = int.Parse(Request.QueryString["IdCliente"]);
            int ID_MODELO = int.Parse(cboModelo0.SelectedItem.Value.ToString());
            //Validar que no se dupliquen los modelos
            clsTD_Cliente_ModeloBL bl = new clsTD_Cliente_ModeloBL();
            List<TD_CLIENTE_MODELO> l = bl.ListarClienteModelo(Id_Cliente);
            bool repetido = false;
            foreach (var item in l)
            {
                if (item.ID_MODELO == ID_MODELO) { repetido = true; break; }
            }
            if (!repetido)
            {
                TD_CLIENTE_MODELO eCM = new TD_CLIENTE_MODELO();
                clsTD_Cliente_ModeloBL oCM = new clsTD_Cliente_ModeloBL();
                eCM.ID_CLIENTE_MODELO = oCM.ObtenerUltimoID() + 1;
                eCM.ID_CLIENTE = Id_Cliente;
                eCM.ID_MODELO = ID_MODELO;
                eCM.DES_MODELO = cboModelo0.SelectedItem.Text;

                oCM.Insertar(eCM);
                ListarModelosxCliente();
            }
            else
            {

            }
        }

        protected void gvModelos0_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            try
            {
                int ID_CLIENTE_MODELO = int.Parse(e.Keys[0].ToString());
                clsTD_Cliente_ModeloBL oCM = new clsTD_Cliente_ModeloBL();
                TD_CLIENTE_MODELO eCM = new TD_CLIENTE_MODELO();
                eCM.ID_CLIENTE_MODELO = ID_CLIENTE_MODELO;
                oCM.Eliminar(eCM);
                e.Cancel = true;
                ListarModelosxCliente();
            }
            catch (Exception)
            {

            }
        }

        protected void chkEstado_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox chkEstado = (CheckBox)sender;
            if (chkEstado.Text == "VEH 2R" && chkEstado.Checked == true)
            {
                Panel1.Visible = true;
            }
            else if (chkEstado.Text == "VEH 2R" && chkEstado.Checked == false)
            {
                Panel1.Visible = false;
            }
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            int ID_LOCAL = 0;
            if (Request.QueryString["IdLocal"] != null)
            {
                ID_LOCAL = int.Parse(Request.QueryString["IdLocal"]);
            }
            int ID_CLIENTE = 0;
            if (Request.QueryString["IdCliente"] != null)
            {
                ID_CLIENTE = int.Parse(Request.QueryString["IdCliente"]);
            }

            clsT_Crm_Cliente_Local_VisitasBL bl = new clsT_Crm_Cliente_Local_VisitasBL();
            T_CRM_CLIENTE_LOCAL_VISITAS ent = new T_CRM_CLIENTE_LOCAL_VISITAS();
            ent.ID_CLIENTE_LOCAL_VISITA = bl.ObtenerUltimoID() + 1;
            ent.FEC_VISITA = DateTime.Parse(deFecha.Value.ToString());
            ent.ID_VENDEDOR = int.Parse(cboVendedor.Value.ToString());
            ent.ID_LOCAL = ID_LOCAL;
            ent.ID_CLIENTE = ID_CLIENTE;
            ent.DES_OBSERVACION = txtObservacion.Text;
            bl.Insertar(ent);
            ListarVisitas();
            ListarVendedor();

            string subPath = @"~/Archivos Imagen/Visitas/VISITA" + ent.ID_CLIENTE_LOCAL_VISITA.ToString();
            bool isExists = Directory.Exists(Server.MapPath(subPath));
            if (!isExists)
                System.IO.Directory.CreateDirectory(Server.MapPath(subPath));

            T_CRM_CLIENTE_LOCAL_VISITA_CARPETA entity = new T_CRM_CLIENTE_LOCAL_VISITA_CARPETA();
            entity.ID_CLIENTE_LOCAL_VISITA_CARPETA = this.NegocioCarpetas.ObtenerUltimo() + 1;
            entity.ID_CLIENTE_LOCAL_VISITA = ent.ID_CLIENTE_LOCAL_VISITA;
            entity.ID_PADRE = null;
            entity.DES_NOMBRE = "VISITA" + ent.ID_CLIENTE_LOCAL_VISITA.ToString();
            entity.IND_ESTADO = true;
            this.NegocioCarpetas.Insertar(entity);
        }

        void ListarVisitas()
        {
            int ID_LOCAL = 0;
            if (Request.QueryString["IdLocal"] != null)
            {
                ID_LOCAL = int.Parse(Request.QueryString["IdLocal"]);
            }
            int ID_CLIENTE = 0;
            if (Request.QueryString["IdCliente"] != null)
            {
                ID_CLIENTE = int.Parse(Request.QueryString["IdCliente"]);
            }

            clsT_Crm_Cliente_Local_VisitasBL bl = new clsT_Crm_Cliente_Local_VisitasBL();
            gvVisitas.DataSource = bl.Listar(ID_CLIENTE, ID_LOCAL);
            gvVisitas.DataBind();
        }

        protected void gvVisitas_RowDeleting(object sender, DevExpress.Web.Data.ASPxDataDeletingEventArgs e)
        {
            try
            {
                int ID_CLIENTE_LOCAL_VISITA = int.Parse(e.Keys[0].ToString());
                clsT_Crm_Cliente_Local_VisitasBL oCM = new clsT_Crm_Cliente_Local_VisitasBL();
                oCM.Eliminar(ID_CLIENTE_LOCAL_VISITA);
                e.Cancel = true;
                ListarVisitas();
            }
            catch (Exception)
            {

            }
        }

        protected void ibFotos_Click(object sender, ImageClickEventArgs e)
        {
            int indice = gvVisitas.FocusedRowIndex;
            if (indice >= 0)
            {
                List<object> keys = gvVisitas.GetSelectedFieldValues(new string[] { gvVisitas.KeyFieldName });

                if (keys.Count > 0)
                {
                    string ID_CLIENTE_LOCAL_VISITA = keys[0].ToString();

                    lblIdVisita.Text = ID_CLIENTE_LOCAL_VISITA;
                    CargarArbol();
                    CargarGaleria();
                    pcFotos.ShowOnPageLoad = true;
                }
            }
        }

        protected void CargarArbol()
        {
            this.tvCarpetas.Nodes.Clear();
            treeItems = this.NegocioCarpetas.Listar(int.Parse(lblIdVisita.Text));
            if (treeItems.Count > 0)
            {
                this.LlenarCarpetas(null, null, this.tvCarpetas);
            }

            this.tvCarpetas.ExpandAll();
        }

        public void LlenarCarpetas(int? codigoPadre, TreeNode node, TreeView tree)
        {
            treeItemsChild = treeItems.FindAll(delegate(T_CRM_CLIENTE_LOCAL_VISITA_CARPETA item) { return (item.ID_PADRE == codigoPadre); });

            foreach (T_CRM_CLIENTE_LOCAL_VISITA_CARPETA hijos in treeItemsChild)
            {
                TreeNode newNode = new TreeNode(hijos.DES_NOMBRE, hijos.ID_CLIENTE_LOCAL_VISITA_CARPETA.ToString());
                if (codigoPadre == null) tree.Nodes.Add(newNode);
                else node.ChildNodes.Add(newNode);
                this.LlenarCarpetas(hijos.ID_CLIENTE_LOCAL_VISITA_CARPETA, newNode, null);
            }
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            this.txtNombreCarpeta.Text = string.Empty;
            this.hfIndicador.Value = Constantes.SI;
            this.pnlCarpeta.HeaderText = "Nueva Carpeta";
            this.pnlCarpeta.Visible = true;
            lblMensajePopup.Text = "";
        }

        protected void btnGrabarCarpeta_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.tvCarpetas.SelectedValue))
            {
                if (txtNombreCarpeta.Text.Trim() == "")
                {
                    lblMensajePopup.Text = "Debe ingresar un nombre para la carpeta.";
                    txtNombreCarpeta.Focus();
                    return;
                }
                try
                {
                    T_CRM_CLIENTE_LOCAL_VISITA_CARPETA entity = null;
                    if (this.hfIndicador.Value == Constantes.SI)
                    {
                        entity = new T_CRM_CLIENTE_LOCAL_VISITA_CARPETA();
                        entity.ID_CLIENTE_LOCAL_VISITA_CARPETA = this.NegocioCarpetas.ObtenerUltimo() + 1;
                        entity.ID_CLIENTE_LOCAL_VISITA = int.Parse(lblIdVisita.Text);
                        entity.ID_PADRE = int.Parse(this.tvCarpetas.SelectedValue);
                        entity.DES_NOMBRE = this.txtNombreCarpeta.Text.Trim();
                        entity.IND_ESTADO = true;
                        bool resultado = this.NegocioCarpetas.Insertar(entity);

                        if (resultado)
                        {
                            string subPath = @"~/Archivos Imagen/Visitas/VISITA" + lblIdVisita.Text + "/" + txtNombreCarpeta.Text.Trim();
                            bool isExists = Directory.Exists(Server.MapPath(subPath));
                            if (!isExists)
                                System.IO.Directory.CreateDirectory(Server.MapPath(subPath));

                            lblMensajePopup.Text = "Carpeta creada satisfactoriamente.";
                        }
                    }
                    else
                    {
                        //Verificar que la carpeta no tenga archivos
                        int idEstructura = 0;
                        idEstructura = int.Parse(this.tvCarpetas.SelectedValue);
                        List<T_CRM_CLIENTE_LOCAL_VISITA_CARPETA_FOTO> lista = this.NegocioFotos.Listar(idEstructura);
                        if (lista.Count > 0)
                        {
                            lblMensajePopup.Text = "La carpeta debe estar vacía antes de cambiar el nombre de la carpeta.";
                        }
                        else
                        {
                            //Modificar el nombre de la carpeta
                            entity = new T_CRM_CLIENTE_LOCAL_VISITA_CARPETA();
                            entity.ID_CLIENTE_LOCAL_VISITA_CARPETA = int.Parse(this.tvCarpetas.SelectedValue);
                            entity.ID_CLIENTE_LOCAL_VISITA = int.Parse(lblIdVisita.Text);
                            entity.ID_PADRE = int.Parse(tvCarpetas.SelectedNode.Parent.Value);
                            entity.DES_NOMBRE = this.txtNombreCarpeta.Text.Trim();
                            entity.IND_ESTADO = true;
                            bool resultado = this.NegocioCarpetas.Modificar(entity);
                            if (resultado)
                            {
                                string sourceDirectory = Server.MapPath(@"~/Archivos Imagen/Visitas/VISITA" + lblIdVisita.Text + "/" + tvCarpetas.SelectedNode.Text);
                                string destinationDirectory = Server.MapPath(@"~/Archivos Imagen/Visitas/VISITA" + lblIdVisita.Text + "/" + txtNombreCarpeta.Text.Trim());

                                bool isExists = Directory.Exists(sourceDirectory);
                                if (isExists)
                                {
                                    Directory.Move(sourceDirectory, destinationDirectory);
                                }

                                lblMensajePopup.Text = "Carpeta modificada satisfactoriamente.";
                            }
                        }
                    }

                    this.CargarArbol();
                    this.pnlCarpeta.Visible = false;
                    txtNombreCarpeta.Text = "";
                }
                catch (Exception ex)
                {
                    lblMensajePopup.Text = ex.Message;
                }
            }
            else
            {
                this.lblMensajePopup.Text = "Debe seleccionar la raiz para crear la carpeta.";
            }
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            this.EditarRegistro();
        }

        protected void EditarRegistro()
        {
            if (tvCarpetas.SelectedNode == null)
            {
                this.lblMensajePopup.Text = "Debe seleccionar la carpeta a modificar.";
                return;
            }
            if (tvCarpetas.SelectedNode.Depth == 0)
            {
                this.lblMensajePopup.Text = "No puede modificar la carpeta principal.";
                return;
            }

            if (!string.IsNullOrEmpty(this.tvCarpetas.SelectedValue))
            {
                this.txtNombreCarpeta.Text = tvCarpetas.SelectedNode.Text;

                this.pnlCarpeta.HeaderText = "Editar Carpeta";
                this.pnlCarpeta.Visible = true;
                this.hfIndicador.Value = Constantes.NO;
            }
            else
            {
                this.lblMensajePopup.Text = "Debe seleccionar la carpeta a modificar.";
                this.pnlCarpeta.Visible = false;
            }
        }

        protected void tvCarpetas_SelectedNodeChanged(object sender, EventArgs e)
        {
            lblMensajePopup.Text = "";
            this.pnlCarpeta.Visible = false;
            txtNombreCarpeta.Text = string.Empty;
            CargarGaleria();
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrEmpty(this.tvCarpetas.SelectedValue))
            {
                if (this.tvCarpetas.SelectedNode.Depth > 0)
                {
                    try
                    {
                        T_CRM_CLIENTE_LOCAL_VISITA_CARPETA entity = new T_CRM_CLIENTE_LOCAL_VISITA_CARPETA();
                        entity.ID_CLIENTE_LOCAL_VISITA_CARPETA = int.Parse(this.tvCarpetas.SelectedValue);
                        entity.ID_CLIENTE_LOCAL_VISITA = int.Parse(lblIdVisita.Text);
                        entity.ID_PADRE = int.Parse(tvCarpetas.SelectedNode.Parent.Value);
                        entity.DES_NOMBRE = this.txtNombreCarpeta.Text.Trim();
                        entity.IND_ESTADO = false;
                        bool resultado = this.NegocioCarpetas.Anular(entity);

                        if (resultado)
                        {
                            this.CargarArbol();
                            this.pnlCarpeta.Visible = false;
                            txtNombreCarpeta.Text = "";
                        }
                    }
                    catch (Exception ex)
                    {
                        lblMensajePopup.Text = ex.Message;
                    }
                }
                else
                {
                    lblMensajePopup.Text = "No puede eliminar la carpeta principal";
                }
            }
            else
            {
                lblMensajePopup.Text = "Debe seleccionar una carpeta";
            }
        }

        protected void Uploader1_FileUploaded(object sender, CuteWebUI.UploaderEventArgs args)
        {
            if (!string.IsNullOrEmpty(this.tvCarpetas.SelectedValue))
            {
                if (this.tvCarpetas.SelectedNode.Depth > 0)
                {
                    string ruta = Server.MapPath(@"~/Archivos Imagen/Visitas/VISITA" + lblIdVisita.Text + "/" + tvCarpetas.SelectedNode.Text + "/");

                    T_CRM_CLIENTE_LOCAL_VISITA_CARPETA_FOTO entity = new T_CRM_CLIENTE_LOCAL_VISITA_CARPETA_FOTO();
                    entity.DES_COMENTARIO = TextosPantalla.TxtComentarioFoto;
                    entity.ID_CLIENTE_LOCAL_VISITA_CARPETA = int.Parse(this.tvCarpetas.SelectedValue.ToString());
                    entity.ID_CLIENTE_LOCAL_VISITA_CARPETA_FOTO = NegocioFotos.ObtenerUltimo() + 1;
                    entity.IND_ESTADO = true;

                    try
                    {
                        string[] filePart = args.FileName.Split('.');

                        string extension = "." + filePart[filePart.Length - 1];
                        string archivo = Constantes.NombreFoto + entity.ID_CLIENTE_LOCAL_VISITA_CARPETA_FOTO + extension;
                        entity.DES_NOMBRE = @"~/Archivos Imagen/Visitas/VISITA" + lblIdVisita.Text + "/" + tvCarpetas.SelectedNode.Text + "/" + archivo;

                        bool resultado = this.NegocioFotos.Insertar(entity);
                        if (resultado)
                        {
                            byte[] file = null;
                            byte[] bytes = Tools.ReadToEnd(args.OpenStream());
                            if (args.FileSize > 1024 * 0.3)
                            {
                                file = Tools.ResizeImageFile(bytes, 500, 400);
                            }
                            else file = bytes;

                            File.WriteAllBytes(ruta + archivo, file);

                            this.CargarGaleria();
                        }
                        else { lblMensajePopup.Text = "No se grabaron los archivos"; }
                    }
                    catch (Exception ex)
                    {
                        lblMensajePopup.Text = ex.Message;
                    }
                }
                else
                {
                    lblMensajePopup.Text = "No puede agregar fotos en la carpeta principal";
                }
            }
            else
            {
                lblMensajePopup.Text = "Debe seleccionar una carpeta";
            }
        }

        protected void CargarGaleria()
        {
            int idEstructura = 0;

            if (!string.IsNullOrEmpty(this.tvCarpetas.SelectedValue))
            {
                idEstructura = int.Parse(this.tvCarpetas.SelectedValue);
                this.dvFotos.DataSource = this.NegocioFotos.Listar(idEstructura);
                this.dvFotos.DataBind();
                dvFotos.Visible = true;
            }
            else
            {
                dvFotos.Visible = false;
            }
        }

        protected void ibEliminar_Click(object sender, ImageClickEventArgs e)
        {
            try
            {
                ImageButton b = (ImageButton)sender;
                int ID_CLIENTE_LOCAL_VISITA_CARPETA_FOTO = int.Parse(b.AlternateText);
                NegocioFotos.Anular(ID_CLIENTE_LOCAL_VISITA_CARPETA_FOTO);
                CargarGaleria();
            }
            catch (Exception ex)
            {
                lblMensajePopup.Text = ex.Message;
            }
        }

        protected void txtComentario_TextChanged(object sender, EventArgs e)
        {
            try
            {
                TextBox t = (TextBox)sender;
                string comentario = t.Text;

                int ID_CLIENTE_LOCAL_VISITA_CARPETA_FOTO = int.Parse(t.ToolTip);

                NegocioFotos.CambiarComentario(ID_CLIENTE_LOCAL_VISITA_CARPETA_FOTO, comentario);
                CargarGaleria();
            }
            catch (Exception ex)
            {
                lblMensajePopup.Text = ex.Message;
            }
        }

    }
}